100 '*** Dots.bas by Will Fastie -- 19 Nov 81  Creative Computing March 1982
110 '*** Entered by Patrick Leabo Tuscon  Modified by Michael Brutman 2-9-85
120 '*** Characters above 127 added and program shortened
130 'dot height can be doubled by setting 290 to work and eraseing 280's return
140 CLEAR:DEFINT A-Z:GOSUB 10000
150 SCREENWIDTH=80:DOTSIZE=2:DHT=2:DOTCHAR=219:DOT$=STRING$(DOTSIZE,DOTCHAR)
160 DIM COLMASK(8):FOR I=0 TO 7:COLMASK(I)=2^(7-I):NEXT I
170 SCREEN 0,1:WIDTH SCREENWIDTH:KEY OFF:CLS
180 PRINT"Press the one you want to see -Space bar to quit";
185 IF INKEY$<>"" GOTO 185
190 CHAR$=INPUT$(1):CODE=ASC(CHAR$)
195 COL=INT(RND*15)+1:IF COL=4 THEN 195
196 COLOR 4,COL
197 DEF SEG:P1=2:P3=187:GOSUB 20000
200 DEF SEG=&HF000
210 IF CODE=>128 THEN BASEADR=&HE05E:CODE=CODE-128: ELSE BASEADR=&HFA6E
220 ADR = BASEADR + (CODE*8):CLS:LOCATE 6,SCREENWIDTH/2:PRINT CHAR$
230 X=(SCREENWIDTH-(8*DOTSIZE))/2:GOSUB 290
240 DEF SEG:P1=3:P2=0
245 GOSUB 20000:IF P7 <> 0 THEN 245
247 P2=1
250 IF CODE>64 AND CODE<91 THEN P3=CODE-41:GOSUB 20000:GOTO 180
260 IF CODE>96 AND CODE<123 THEN P3=CODE-73:GOSUB 20000:GOTO 180
270 IF CODE>47 AND CODE<58 THEN P3=CODE-35:GOSUB 20000:GOTO 180
275 P3=196:GOSUB 20000:GOTO 180
290 FOR R=0 TO 7:RV=PEEK(ADR+R):FOR C=0 TO 7
300 IF (RV AND COLMASK(C)) = 0 THEN 330
310 LOCATE 8+R*DHT,X+C*DOTSIZE:PRINT DOT$;
320 LOCATE 8+R*DHT+1,X+C*DOTSIZE:PRINT DOT$;
330 NEXT C:NEXT R:LOCATE 1,1:RETURN
10000 ' set up the link between speech bios and basic
10010 DIM T%(25)
10020 DIM D%(25000)
10030 DEFINT P,T
10040 P1=3:P2=1:P3=0:P4=0:P5=0:P6=0:P7=0
10050 TMP=0:TP!=0:TALK=0:I=0
10060 TP!=VARPTR(T%(0))
10070 FOR I=0 TO 49:READ TMP:POKE I+TP!,TMP:NEXT
10080 DEF SEG=&H50:P4=PEEK(16)+PEEK(17)*256:DEF SEG:RETURN
10090 DATA 85,139,236,30,139,118,18,139
10100 DATA 28,139,118,16,139,4,138,227
10110 DATA 139,118,14,139,28,139,118,10
10120 DATA 139,52,86,139,118,8,139,12
10130 DATA 139,118,12,142,28,94,205,77
10140 DATA 31,139,118,6,136,4,93,202,14,0
20000 'subroutine
20010 TP!=VARPTR(T%(0))
20020 IF TP!>32768! THEN TALK=TP!-65536!
20030 IF TP!<32768! THEN TALK=TP!
20040 CALL TALK(P1,P2,P3,P4,P5,P6,P7)
20050 RETURN
